home *** CD-ROM | disk | FTP | other *** search
/ Multimedia Cube 1 & 2 / Multimedia Cube - Disc 2.iso / wfsound.mst < prev   
Text File  |  1996-03-01  |  22KB  |  862 lines

  1. '**************************************************************************
  2. '*              Wired for Sound Pro 95 CD Install Script
  3. '*     version 2.1 CD   by Aaron Wallace  ⌐ 1995 Aristosoft, Inc
  4. '**************************************************************************
  5.  
  6. '' Define DEBUG for script debugging
  7.  
  8. '$INCLUDE 'setupapi.inc'
  9. '$INCLUDE 'msdetect.inc'
  10.  
  11. ''Dialog ID's
  12. CONST WELCOME      = 100
  13. CONST ASKQUIT      = 200
  14. CONST DESTPATH     = 300
  15. CONST EXITFAILURE  = 400
  16. CONST EXITQUIT     = 600
  17. CONST EXITSUCCESS  = 700
  18. CONST WHICHINST    = 800
  19. CONST APPHELP      = 900
  20. CONST WHICHINSTHLP = 910
  21. CONST SETOWNER       = 1000
  22. CONST TESTSOUND    = 1100
  23. CONST INSTALLDRV   = 1200
  24. CONST SOUNDPLAYED  = 1300
  25. CONST WAITDLG       = 1400
  26. CONST EXITREBOOT   = 1500
  27. CONST WHICHVOICE   = 1600
  28. CONST BBD1       = 5000
  29. CONST BBD2       = 5010
  30. CONST BBD3       = 5020
  31. CONST BBD4       = 5030
  32. CONST BBD5       = 5040
  33. CONST BBD6       = 5050
  34. CONST SOUNDSDLG    = 5200
  35. CONST TAPPSDLG     = 5300
  36. CONST VOICESDLG    = 5400
  37. CONST CUSTINST     = 6200
  38. CONST TOOBIG       = 6300
  39. CONST BADPATH      = 6400
  40.  
  41. '' For message boxes
  42. CONST MB_YESNO=4
  43. CONST MB_RETRYCANCEL=5
  44. CONST IDNO=7
  45. CONST IDYES=6
  46. CONST IDRETRY=4
  47. CONST IDCANCEL=2
  48.  
  49. ''Bitmap ID
  50. CONST LOGO         = 1
  51.  
  52. ''File Types
  53. CONST BASEFILES     = 1
  54. CONST TAPPFILES     = 2
  55. CONST SOUNDFILES    = 3
  56. CONST VOICEFILES    = 4
  57. CONST MAX_TYPES     = 4
  58.  
  59. ''Install directories, etc.
  60. GLOBAL DEST$        ''Default destination directory.
  61. GLOBAL WINDRIVE$    ''Windows drive letter.
  62. GLOBAL CUIDLL$        ''CUI DLL
  63. GLOBAL WINDIR$        ''Windows directory
  64. GLOBAL SYSDIR$        ''System directory
  65. GLOBAL WININI$        ''"win.ini"
  66. GLOBAL SYSINI$        ''GetWindowsDir() + "system.ini"
  67.  
  68. '' User info
  69. GLOBAL OWNER$        '' Product registered owner
  70. GLOBAL WORKPLACE$   '' Company or such
  71.  
  72. ''Install item lists
  73. GLOBAL BASE$        ''List of base files
  74. GLOBAL TAPPS$       ''List of all talking apps
  75. GLOBAL SOUNDS$      ''List of all sounds.
  76. GLOBAL VOICES$      ''List of available voices
  77.  
  78. GLOBAL BASEINST$    ''List of base files to install
  79. GLOBAL TAPPSINST$   ''List of Talking Apps to install
  80. GLOBAL SOUNDSINST$  ''List of sounds to install
  81. GLOBAL VOICESINST$  ''List of voices to install
  82.  
  83. ''Custom Install list symbol names
  84. GLOBAL BASENEEDS$   ''Option list costs per drive
  85. GLOBAL TAPPNEEDS$
  86. GLOBAL SOUNDNEEDS$
  87. GLOBAL VOICENEEDS$
  88. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  89.  
  90. ''Custom Install dialog list symbol names
  91. GLOBAL CHECKSTATES$ ''List of check box values
  92. GLOBAL STATUSTEXT$  ''List of values to initialize status items
  93. GLOBAL DRIVETEXT$   ''Drive space info, etc.
  94.  
  95. '' Install DSOUND
  96. GLOBAL INSTDSOUND%
  97.  
  98. '' Customize product
  99. GLOBAL CUSTOMIZE%
  100.  
  101. '' Test sound hardware
  102. GLOBAL DOTEST%
  103.  
  104. GLOBAL WFSFOUND%
  105. GLOBAL CUSTINSTALL%
  106.  
  107. '' Which type of install to perform, by default
  108. GLOBAL DEFINSTOPT$
  109.  
  110. ''Progman titles
  111. GLOBAL WFSAPP$        ''Name of WFS app
  112.  
  113. ''Win.ini [Aristosoft] install code
  114. GLOBAL INSTDIR$
  115.  
  116. ''Space requirements
  117. GLOBAL FITS%        '' > 0 if everything fits
  118.  
  119. DECLARE SUB RecalcOptFiles (ftype%)
  120. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  121. DECLARE FUNCTION GetWindowsVersionCorrectly& ()
  122. DECLARE FUNCTION MakeVer& (x as integer, y as integer)
  123. DECLARE FUNCTION StringInList (s$, y$) AS INTEGER
  124.  
  125. DECLARE FUNCTION sndPlaySound LIB "MMSYSTEM.DLL" (f$, fl%) AS INTEGER
  126. DECLARE FUNCTION GetModuleHandle LIB "KERNEL" (f$) AS INTEGER
  127.  
  128. DECLARE SUB Ctl3dRegister LIB "WFSUI.DLL" (f%)
  129. DECLARE SUB Ctl3dAutoSubclass LIB "WFSUI.DLL" (f%)
  130. DECLARE SUB Ctl3dUnregister LIB "WFSUI.DLL" (f%)
  131.  
  132. DECLARE SUB RemoveSectionFiles (dest$, sect$)
  133. DECLARE SUB RemDirectory (d$)
  134. DECLARE FUNCTION HasSoundDriver() AS INTEGER
  135. DECLARE SUB SendProgmanCommand LIB "CUI.DLL" (s$)
  136. DECLARE SUB KillFiles LIB "CUI.DLL" (s$)
  137. DECLARE SUB KillFile LIB "CUI.DLL" (s$)
  138.  
  139. '' These are defined in wfs.inc (product-specific)
  140. DECLARE SUB SetProductTitles
  141. DECLARE FUNCTION InfFile() AS STRING
  142. DECLARE FUNCTION MakeInstDir(D$) AS STRING
  143. DECLARE SUB AddInfSectionNames (BASE$, TAPPS$, SOUNDS$, VOICES$, BASEINST$, TAPPSINST$, SOUNDSINST$, VOICESINST$)
  144. DECLARE SUB RecalcPath
  145. DECLARE SUB AddOptFilesToCopyList (ftype%)
  146. DECLARE SUB SetDriveStatus
  147. DECLARE SUB AddOptFiles
  148. DECLARE SUB ConfigureApps
  149. DECLARE SUB AddBillboards
  150. DECLARE SUB DoUninstall
  151.  
  152.  
  153. '' This is where it all begins!
  154.  
  155. INIT:
  156.  
  157.     CUIDLL$ = "cui.dll"
  158.     DEFINSTOPT$ = "1"
  159.     INSTDSOUND% = 0
  160.     CUSTOMIZE% = -1
  161.     DOTEST% = -1
  162.  
  163.     SetProductTitles
  164.  
  165.     HELPPROC$ = "FHelpDlgProc"        ''Help dialog procedure
  166.  
  167.     SetBitmap CUIDLL$, LOGO
  168.  
  169.  
  170. '' We don't do Windows 3.0...
  171.  
  172.     If GetWindowsVersionCorrectly() < MakeVer(3, 10) Then
  173.     i% = DoMsgBox("This product requires Windows version 3.10 or greater", WFSAPP$, MB_OK)
  174.     GOTO DONEFINIFIN
  175.     End If
  176.  
  177. '' We don't want these DLLs to be loaded quite yet...
  178. LookAround:
  179.     IF GetModuleHandle("SNDAPI") OR GetModuleHandle("WFSABOUT") THEN
  180.     i% = DoMsgBox("Please quit all other Aristosoft products before continuing with Setup.", WFSAPP$, MB_RETRYCANCEL)
  181.     IF i% = IDRETRY THEN
  182.         GOTO LookAround
  183.     ELSEIF i% = IDCANCEL THEN
  184.         GOTO DONEFINIFIN
  185.     END IF
  186.     END IF
  187.  
  188.     HCUI% = GetModuleHandle("CUI")
  189.     Ctl3dRegister(HCUI%)
  190.     Ctl3dAutoSubclass(HCUI%)
  191.  
  192. ''Find location of INF file and create a default dest. dir
  193.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  194.     IF szInf$ = "" THEN
  195.     szInf$ = GetSymbolValue("STF_CWDDIR") + InfFile()
  196.     END IF
  197.  
  198.     '' Load the INF file
  199.     ReadInfFile szInf$
  200.  
  201.     '' Construct default strings
  202.     WINDIR$ = GetWindowsDir()
  203.     SYSDIR$ = GetWindowsSysDir()
  204.     WININI$ = "win.ini"
  205.     SYSINI$ = MakePath(WINDIR$, "system.ini")
  206.  
  207.     '' Construct the default install path
  208.     WINDRIVE$ = MID$(WINDIR$, 1, 1)
  209.     DEST$ = MakeInstDir(WINDRIVE$)
  210.  
  211.     '' Setup install symbols
  212.     BASE$ = "Base Files"
  213.     TAPPS$ = "Talking Apps"
  214.     SOUNDS$ = "Sounds"
  215.     VOICES$ = "Voices"
  216.     BASEINST$ = "Base Files Inst"
  217.     TAPPSINST$ = "Talking Apps Inst"
  218.     SOUNDSINST$ = "Sounds Inst"
  219.     VOICESINST$ = "Voices Inst"
  220.  
  221.     SetSymbolValue BASE$, ""
  222.     SetSymbolValue TAPPS$, ""
  223.     SetSymbolValue SOUNDS$, ""
  224.     SetSymbolValue VOICES$, ""
  225.  
  226.     ''Set up symbols for the initial install dialog
  227.     RADIODEFAULT$ = "Radio Default"
  228.  
  229.     ''Set up symbols for the custom install dialog
  230.     CHECKSTATES$ = "CheckItemsState"
  231.     STATUSTEXT$  = "StatusItemsText"
  232.     DRIVETEXT$   = "DriveStatusText"
  233.     FOR i% = 1 TO 4 STEP 1
  234.     AddListItem CHECKSTATES$, "ON"
  235.     NEXT i%
  236.     FOR i% = 1 TO 4 STEP 1
  237.     AddListItem STATUSTEXT$, ""
  238.     NEXT i%
  239.     FOR i% = 1 TO 7 STEP 1
  240.     AddListItem DRIVETEXT$, ""
  241.     NEXT i%
  242.     ReplaceListItem DRIVETEXT$, 7, DEST$
  243.  
  244.     ''Disk cost list symbols
  245.     BASENEEDS$   = "BaseNeeds"
  246.     TAPPNEEDS$   = "TAppNeeds"
  247.     SOUNDNEEDS$  = "SoundNeeds"
  248.     VOICENEEDS$  = "VoiceNeeds"
  249.     EXTRACOSTS$  = "ExtraCosts"
  250.     FOR i% = 1 TO 26 STEP 1
  251.     AddListItem EXTRACOSTS$, "0"
  252.     NEXT i%
  253.  
  254.     ''Configure lists of installable files
  255.     AddInfSectionNames BASE$, TAPPS$, SOUNDS$, VOICES$, BASEINST$, TAPPSINST$, SOUNDSINST$, VOICESINST$
  256.  
  257. '$IFDEF DEBUG
  258.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  259. '$ENDIF ''DEBUG
  260.  
  261.  
  262. '' Ask which voice to use
  263. '' See if users want an easy install, custom install, or no install...
  264. WHICHVOICE:
  265.     res% = sndPlaySound(MakePath(GetSymbolValue("STF_SRCDIR"), "sounds\install\intro.wav"), 3)
  266.  
  267.     SetSymbolValue "RadioDefault", "1"
  268.  
  269.     sz$ = UIStartDlg(CUIDLL$, WHICHVOICE, "FRadioDlgProc", WHICHINSTHLP, HELPPROC$)
  270.     
  271.     ''sz$ is the button the user pressed; RADIODEFAULT$ is the option selected
  272.  
  273.     IF sz$ = "EXIT" THEN
  274.     GOSUB ASKQUIT
  275.     GOTO WHICHVOICE
  276.     ELSEIF sz$ = "CONTINUE" THEN
  277.     sz$ = GetSymbolValue("ButtonChecked")
  278.     IF sz$ = "1" THEN
  279.         UIPop 1
  280.         INSTSNDDIR$ = MakePath(GetSymbolValue("STF_SRCDIR"), "sounds\install\simmons")
  281.         GOTO WELCOME
  282.     ELSEIF sz$ = "2" THEN
  283.         UIPop 1
  284.         INSTSNDDIR$ = MakePath(GetSymbolValue("STF_SRCDIR"), "sounds\install\sultry")
  285.         GOTO WELCOME
  286.     ELSEIF sz$ = "3" THEN
  287.         UIPop 1
  288.         INSTSNDDIR$ = MakePath(GetSymbolValue("STF_SRCDIR"), "sounds\install\harold")
  289.         GOTO WELCOME
  290.     ELSEIF sz$ = "4" THEN
  291.         UIPop 1
  292.         INSTSNDDIR$ = MakePath(GetSymbolValue("STF_SRCDIR"), "sounds\install\scotty")
  293.         GOTO WELCOME
  294.     END IF
  295.     END IF
  296.     GOTO WHICHVOICE
  297.  
  298.  
  299. '' Display Welcome dialog
  300. WELCOME:
  301.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "opening.wav"), 3)
  302.  
  303.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  304.     
  305.     IF sz$ = "EXIT" THEN
  306.     GOSUB ASKQUIT
  307.     GOTO WELCOME
  308.     ELSEIF sz$ = "CONTINUE" THEN
  309.     UIPop 1
  310.     GOTO WHICHINST
  311.     END IF
  312.     GOTO WELCOME
  313.  
  314.  
  315. '' See if users want an easy install, custom install, or no install...
  316. WHICHINST:
  317.     SetSymbolValue "RadioDefault", DEFINSTOPT$
  318.  
  319.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "install.wav"), 3)
  320.  
  321.     sz$ = UIStartDlg(CUIDLL$, WHICHINST, "FRadioDlgProc", WHICHINSTHLP, HELPPROC$)
  322.     
  323.     ''sz$ is the button the user pressed; RADIODEFAULT$ is the option selected
  324.  
  325.     IF sz$ = "EXIT" THEN
  326.     GOSUB ASKQUIT
  327.     GOTO WHICHINST
  328.     ELSEIF sz$ = "CONTINUE" THEN
  329.     sz$ = GetSymbolValue("ButtonChecked")
  330.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "instcont.wav"), 2)
  331.     IF sz$ = "1" THEN
  332.         UIPop 1
  333.         CUSTINSTALL% = 0
  334.         GOTO CUSTOMIZE
  335.     ELSEIF sz$ = "2" THEN
  336.         UIPop 1
  337.         CUSTINSTALL% = -1
  338.         GOTO CUSTOMIZE
  339.     ELSEIF sz$ = "3" THEN
  340.         DoUninstall
  341.         GOTO WHICHINST
  342.     END IF
  343.     END IF
  344.     GOTO WHICHINST
  345.  
  346.  
  347. '' Customize the copy of the product
  348. CUSTOMIZE:
  349.     IF NOT CUSTOMIZE% THEN
  350.     GOTO SOUNDTEST
  351.     END IF
  352.  
  353.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "customiz.wav"), 3)
  354.  
  355.     sz$ = UIStartDlg(CUIDLL$, SETOWNER, "FNameOrgDlgProc", WHICHINSTHLP, HELPPROC$)
  356.  
  357.     IF sz$ = "EXIT" THEN
  358.     GOSUB ASKQUIT
  359.     GOTO CUSTOMIZE
  360.     ELSEIF sz$ = "CONTINUE" THEN
  361.     OWNER$ = GetSymbolValue("NameOut")
  362.     WORKPLACE$ = GetSymbolValue("OrgOut")
  363.     UIPop 1
  364.     GOTO SOUNDTEST
  365.     ELSEIF sz$ = "BACK" THEN
  366.     UIPop 1
  367.     GOTO WHICHINST
  368.     END IF
  369.     GOTO CUSTOMIZE
  370.  
  371.  
  372. '' Test the sound system
  373. SOUNDTEST:
  374.     IF NOT DOTEST% THEN
  375.     GOTO DOINST
  376.     END IF
  377.  
  378.     sz$ = UIStartDlg(CUIDLL$, TESTSOUND, "FInfoDlgProc", WHICHINSTHLP, HELPPROC$)
  379.  
  380.     IF sz$ = "EXIT" THEN
  381.     GOSUB ASKQUIT
  382.     GOTO SOUNDTEST
  383.     ELSEIF sz$ = "CONTINUE" THEN
  384.     UIPop 1
  385.     IF HasSoundDriver() THEN
  386.         GOTO DOINST
  387.     ELSE
  388.         GOTO INSTDSOUND
  389.     END IF
  390.     ELSEIF sz$ = "BACK" THEN
  391.     UIPop 1
  392.     GOTO CUSTOMIZE
  393.     ELSEIF sz$ = "TEST" THEN
  394.     w$ = MakePath(INSTSNDDIR$, "test.wav")
  395.     res% = sndPlaySound(w$, 2)
  396.     UIPop 1
  397.     GOTO DIDPLAY
  398.     END IF
  399.     GOTO SOUNDTEST
  400.  
  401.  
  402. '' Did the sound play?
  403. DIDPLAY:
  404.     sz$ = UIStartDlg(CUIDLL$, SOUNDPLAYED, "FInfoDlgProc", WHICHINSTHLP, HELPPROC$)
  405.  
  406.     IF sz$ = "EXIT" THEN
  407.     GOSUB ASKQUIT
  408.     GOTO DIDPLAY
  409.     ELSEIF sz$ = "YES" THEN
  410.     UIPop 1
  411.     GOTO DOINST
  412.     ELSEIF sz$ = "NO" THEN
  413.     UIPop 1
  414.     GOTO INSTDSOUND
  415.     ELSEIF sz$ = "BACK" THEN
  416.     UIPop 1
  417.     GOTO SOUNDTEST
  418.     END IF
  419.     GOTO DIDPLAY
  420.  
  421.  
  422. '' Install DSOUND
  423. INSTDSOUND:
  424.     sz$ = UIStartDlg(CUIDLL$, INSTALLDRV, "FInfoDlgProc", WHICHINSTHLP, HELPPROC$)
  425.  
  426.     IF sz$ = "EXIT" THEN
  427.     GOSUB ASKQUIT
  428.     GOTO INSTDSOUND
  429.     ELSEIF sz$ = "INSTALL" THEN
  430.     UIPop 1
  431.     INSTDSOUND% = -1
  432.     GOTO DOINST
  433.     ELSEIF sz$ = "CONTINUE" THEN
  434.     UIPop 1
  435.     GOTO DOINST
  436.     ELSEIF sz$ = "BACK" THEN
  437.     UIPop 1
  438.     GOTO DIDPLAY
  439.     END IF
  440.     GOTO INSTDSOUND
  441.  
  442.  
  443. '' Do the appropriate type of install
  444. DOINST:
  445.     IF CUSTINSTALL% THEN
  446.     GOTO CUSTINST
  447.     END IF
  448.     '' else fall-thru
  449.  
  450. ''Perform a default installation (of all files and options)
  451. DEFINST:
  452.     RecalcPath
  453.     SetDriveStatus
  454.  
  455. GETDEFINSTPATH:
  456.     GOSUB GETPATH
  457.  
  458.     IF sz$ = "CONTINUE" THEN
  459.     ''Install only if it will fit.
  460.     IF FITS% > 0 THEN
  461.         GOSUB TOOBIG
  462.         GOTO GETDEFINSTPATH
  463.     END IF
  464.     UIPop 1
  465.     GOTO INSTALL
  466.     ELSEIF sz$ = "BACK" THEN
  467.     GOTO WHICHINST
  468.     END IF
  469.     GOTO GETDEFINSTPATH
  470.  
  471.  
  472. ''Perform a custom installation (let user choose files, etc)
  473. CUSTINST:
  474.     RecalcPath
  475.     SetDriveStatus
  476.  
  477.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "custinst.wav"), 3)
  478.  
  479. CUSTINSTDLG:
  480.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  481.  
  482.     IF sz$ = "CONTINUE" THEN
  483.     ''Install only if it will fit.
  484.     IF FITS% > 0 THEN
  485.         GOSUB TOOBIG
  486.         GOTO CUSTINSTDLG
  487.     END IF
  488.     UIPop 1
  489.     GOTO INSTALL
  490.     ELSEIF sz$ = "PATH" THEN
  491.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "instdir.wav"), 3)
  492.     GOSUB GETPATH
  493.     GOTO CUSTINSTDLG
  494.     ELSEIF sz$ = "CHK1" THEN
  495.     RecalcOptFiles BASEFILES
  496.     SetDriveStatus
  497.     GOTO CUSTINSTDLG
  498.     ELSEIF sz$ = "CHK2" THEN
  499.     RecalcOptFiles TAPPFILES
  500.     SetDriveStatus
  501.     GOTO CUSTINSTDLG
  502.     ELSEIF sz$ = "CHK3" THEN
  503.     RecalcOptFiles SOUNDFILES
  504.     SetDriveStatus
  505.     GOTO CUSTINSTDLG
  506.     ELSEIF sz$ = "CHK4" THEN
  507.     RecalcOptFiles VOICEFILES
  508.     SetDriveStatus
  509.     GOTO CUSTINSTDLG
  510.     ELSEIF sz$ = "BTN2" THEN
  511.     GOTO TAPPFILES
  512.     ELSEIF sz$ = "BTN3" THEN
  513.     GOTO SOUNDFILES
  514.     ELSEIF sz$ = "BTN4" THEN
  515.     GOTO VOICEFILES
  516.     ELSEIF sz$ = "EXIT" THEN
  517.     GOSUB ASKQUIT
  518.     GOTO CUSTINST
  519.     END IF
  520.     GOTO CUSTINSTDLG
  521.  
  522.  
  523. INSTALL:
  524.     SetRestartDir DEST$
  525.     ClearCopyList
  526.  
  527.     AddOptFiles
  528.  
  529.     AddBillboards
  530.  
  531.     CreateDir DEST$, cmoNone
  532.  
  533.     UIPopAll
  534.  
  535.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "copying.wav"), 3)
  536.  
  537.     ''Do the copyn'
  538.     SetCopyGaugePosition 10, 135
  539.     CopyFilesInCopyList
  540.  
  541.     ''Back up SYSTEM.INI and WIN.INI
  542.     CopyFile MakePath(WINDIR$, WININI$), MakePath(WINDIR$, "WIN.BAK"), cmoOverwrite, 0
  543.     CopyFile SYSINI$, MakePath(WINDIR$, "SYSTEM.BAK"), cmoOverwrite, 0
  544.  
  545.     '' Configure the installed applications
  546.     ConfigureApps
  547.  
  548.     ''See if we need to restart Windows to finish installing system files which may be in use
  549.     IF RestartListEmpty() = 0 THEN
  550.     i% = DoMsgBox("Certain system files that Setup needs to install are currently in use." + "  Please close all other applications and press OK.  Setup will exit Windows, install these files, and restart Windows.", WFSAPP$ + " Setup", MB_OK)
  551.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "restart.wav"), 3)
  552.     i% = ExitExecRestart()
  553.     END IF
  554.  
  555. QUIT:
  556.     ON ERROR GOTO ERRQUIT
  557.  
  558.     IF ERR = 0 THEN
  559.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "done.wav"), 3)
  560.     dlg% = EXITREBOOT
  561.     ELSEIF ERR = STFQUIT THEN
  562.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "donerr.wav"), 3)
  563.     dlg% = EXITQUIT
  564.     ELSE
  565.  
  566. '$IFNDEF DEBUG
  567.     RESUME NEXT
  568. '$ELSE
  569.     dlg% = EXITFAILURE
  570. '$ENDIF
  571.  
  572.     END IF
  573. QUITL1:
  574.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  575.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "finish.wav"), 2)
  576.     IF sz$ = "REACTIVATE" THEN
  577.     GOTO QUITL1
  578.     END IF
  579.     UIPop 1
  580.  
  581. DONEFINIFIN:
  582.     Ctl3dUnregister(HCUI%)
  583.     END
  584.  
  585. ERRQUIT:
  586.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "calltech.wav"), 3)
  587.     i% = DoMsgBox("Setup sources were corrupted, call Aristosoft at (510) 426-5355!", "Setup Error", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  588.     Ctl3dUnregister(HCUI%)
  589.     END
  590.  
  591.  
  592.  
  593. GETPATH:
  594.     SetSymbolValue "EditTextIn", DEST$
  595.     SetSymbolValue "EditFocus", "END"
  596. GETPATHL1:
  597.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  598.  
  599.     IF sz$ = "CONTINUE" THEN
  600.     olddest$ = DEST$
  601.     DEST$ = GetSymbolValue("EditTextOut")
  602.  
  603.     ''Validate new path.
  604.     IF IsDirWritable(DEST$) = 0 THEN
  605.         GOSUB BADPATH
  606.         GOTO GETPATHL1
  607.     END IF
  608.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "donepath.wav"), 3)
  609.     UIPop 1
  610.  
  611.     ''Truncate display if too long.
  612.     IF LEN(DEST$) > 23 THEN
  613.         ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  614.     ELSE
  615.         ReplaceListItem DRIVETEXT$, 7, DEST$
  616.     END IF
  617.  
  618.     ''Recalc if path changed.
  619.     IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  620.         RecalcPath
  621.         SetDriveStatus
  622.     END IF
  623.  
  624.     olddest$ = ""
  625.     RETURN
  626.     ELSEIF sz$ = "EXIT" THEN
  627.     GOSUB ASKQUIT
  628.     GOTO GETPATHL1
  629.     ELSEIF sz$ = "BACK" THEN
  630.     UIPop 1
  631.     RETURN
  632.     END IF
  633.     GOTO GETPATHL1
  634.  
  635.  
  636. TAPPFILES:
  637.     SetSymbolValue "ListItemsIn", GetSymbolValue(TAPPS$)
  638.     SetSymbolValue "ListItemsOut", GetSymbolValue(TAPPSINST$)
  639. TAPPF:
  640.     sz$ = UIStartDlg(CUIDLL$, TAPPSDLG, "FMultiDlgProc", APPHELP, HELPPROC$)
  641.  
  642.     IF sz$ = "CONTINUE" THEN
  643.     UIPop 1
  644.     SetSymbolValue TAPPSINST$, GetSymbolValue("ListItemsOut")
  645.     RecalcOptFiles TAPPFILES
  646.     SetDriveStatus
  647.     GOTO CUSTINSTDLG
  648.     ELSEIF sz$ = "EXIT" THEN
  649.     GOSUB ASKQUIT
  650.     GOTO TAPPF
  651.     ELSE '' Back...
  652.     UIPop 1
  653.     GOTO CUSTINSTDLG
  654.     END IF
  655.     GOTO TAPPF
  656.  
  657.  
  658. SOUNDFILES:
  659.     SetSymbolValue "ListItemsIn", GetSymbolValue(SOUNDS$)
  660.     SetSymbolValue "ListItemsOut", GetSymbolValue(SOUNDSINST$)
  661. SOUNDF:
  662.     sz$ = UIStartDlg(CUIDLL$, SOUNDSDLG, "FMultiDlgProc", APPHELP, HELPPROC$)
  663.  
  664.     IF sz$ = "CONTINUE" THEN
  665.     UIPop 1
  666.     SetSymbolValue SOUNDSINST$, GetSymbolValue("ListItemsOut")
  667.     RecalcOptFiles SOUNDFILES
  668.     SetDriveStatus
  669.     GOTO CUSTINSTDLG
  670.     ELSEIF sz$ = "EXIT" THEN
  671.     GOSUB ASKQUIT
  672.     GOTO SOUNDF
  673.     ELSE '' Back...
  674.     UIPop 1
  675.     GOTO CUSTINSTDLG
  676.     END IF
  677.     GOTO SOUNDF
  678.  
  679.  
  680. VOICEFILES:
  681.     SetSymbolValue "ListItemsIn", GetSymbolValue(VOICES$)
  682.     SetSymbolValue "ListItemsOut", GetSymbolValue(VOICESINST$)
  683. VOICEF:
  684.     sz$ = UIStartDlg(CUIDLL$, VOICESDLG, "FMultiDlgProc", APPHELP, HELPPROC$)
  685.  
  686.     IF sz$ = "CONTINUE" THEN
  687.     UIPop 1
  688.     SetSymbolValue VOICESINST$, GetSymbolValue("ListItemsOut")
  689.     RecalcOptFiles VOICEFILES
  690.     SetDriveStatus
  691.     GOTO CUSTINSTDLG
  692.     ELSEIF sz$ = "EXIT" THEN
  693.     GOSUB ASKQUIT
  694.     GOTO VOICEF
  695.     ELSE '' Back...
  696.     UIPop 1
  697.     GOTO CUSTINSTDLG
  698.     END IF
  699.     GOTO VOICEF
  700.  
  701.  
  702. TOOBIG:
  703.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  704.     UIPop 1
  705.     RETURN
  706.  
  707.  
  708.  
  709. BADPATH:
  710.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  711.     UIPop 1
  712.     RETURN
  713.  
  714.  
  715. ASKQUIT:
  716.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "quit.wav"), 3)
  717.  
  718.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  719.  
  720.     IF sz$ = "EXIT" THEN
  721.     UIPopAll
  722.     ERROR STFQUIT
  723.     ELSEIF sz$ = "REACTIVATE" THEN
  724.     GOTO ASKQUIT
  725.     ELSE
  726.     UIPop 1
  727.     END IF
  728.     RETURN
  729.  
  730.  
  731. ''Recalculate space based on install options...
  732. SUB RecalcOptFiles (ftype%) STATIC
  733.  
  734.     CursorSave% = ShowWaitCursor()
  735.  
  736.     sz$ = UIStartDlg(CUIDLL$, WAITDLG, "FModelessDlgProc", APPHELP, HELPPROC$)
  737.  
  738.     ClearCopyList
  739.  
  740.     AddOptFilesToCopyList ftype%
  741.  
  742.     fExtra% = 0
  743.     IF ftype% = BASEFILES THEN
  744.     ListSym$ = BASENEEDS$
  745.     IF GetListItem(CHECKSTATES$, BASEFILES) = "ON" THEN
  746.         ''Add extra cost to Windows drive for ini/progman/pointers
  747.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  748.         ReplaceListItem EXTRACOSTS$, ndrive%, "65536"
  749.         fExtra% = 1
  750.     END IF
  751.     ELSEIF ftype% = TAPPFILES THEN
  752.     ListSym$ = TAPPNEEDS$
  753.     ELSEIF ftype% = SOUNDFILES THEN
  754.     ListSym$ = SOUNDNEEDS$
  755.     ELSEIF ftype% = VOICEFILES THEN
  756.     ListSym$ = VOICENEEDS$
  757.     END IF
  758.  
  759.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  760.  
  761.     cost& = 0
  762.     FOR i% = 1 TO 26 STEP 1
  763.     cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  764.     NEXT i%
  765.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  766.  
  767.     IF fExtra% THEN
  768.     ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  769.     END IF
  770.  
  771.     UIPop 1
  772.  
  773.     RestoreCursor CursorSave%
  774.  
  775.     ListSym$ = ""
  776. END SUB
  777.  
  778.  
  779. ''Make path from dir and szFile; add \  as needed
  780. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  781.     IF szDir$ = "" THEN
  782.     MakePath = szFile$
  783.     ELSEIF szFile$ = "" THEN
  784.     MakePath = szDir$
  785.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  786.     MakePath = szDir$ + szFile$
  787.     ELSE
  788.     MakePath = szDir$ + "\" + szFile$
  789.     END IF
  790. END FUNCTION
  791.  
  792.  
  793. '' Return true if the given string is in the symbol's list
  794. FUNCTION StringInList (s$, y$) STATIC AS INTEGER
  795.     l% = GetListLength(y$)
  796.     FOR i% = 1 TO l
  797.     IF s$ = GetListItem(y$, i%) THEN
  798.         StringInList = -1
  799.         GOTO DONE
  800.     END IF
  801.     NEXT i%
  802.     StringInList = 0
  803. DONE:
  804. END FUNCTION
  805.  
  806.  
  807. ''Get Windows version in a useful way
  808. FUNCTION GetWindowsVersionCorrectly& () STATIC
  809.     GetWindowsVersionCorrectly = GetWindowsMajorVersion() * 256 + GetWindowsMinorVersion()
  810. END FUNCTION
  811.  
  812.  
  813. '' Turn x, y into a major.minor version long
  814. FUNCTION MakeVer& (x as integer, y as integer) STATIC
  815.     MakeVer = x * 256 + y
  816. END FUNCTION
  817.  
  818.  
  819. '' Remove all files in the given .INF section
  820. SUB RemoveSectionFiles (dest$, sect$) STATIC
  821.     foo$ = "foo"
  822.     MakeListFromSectionFilename foo$, sect$
  823.     l% = GetListLength(foo$)
  824.     FOR i% = 1 TO l% STEP 1
  825.     RemoveFile MakePath(dest$, GetListItem(foo$, i%)), cmoForce
  826.     NEXT i%
  827.     foo$ = ""
  828. END SUB
  829.  
  830.  
  831. '' Remove directory and all files in it, if it exists
  832. SUB RemDirectory(d$) STATIC
  833.     IF Exists(MakePath(d$, "NUL")) THEN
  834.     Kill MakePath(d$, "*.*")
  835.     RmDir d$
  836.     END IF
  837. END SUB
  838.  
  839.  
  840. '' Return True (-1) if the user has a sound driver in the [drivers]
  841. ''  section of win.ini.
  842. FUNCTION HasSoundDriver() STATIC AS INTEGER
  843.     r% = 0
  844.     IF GetIniKeyString(SYSINI$, "drivers", "wave") <> "" THEN
  845.     r% = -1
  846.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave1") <> "" THEN
  847.     r% = -1
  848.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave2") <> "" THEN
  849.     r% = -1
  850.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave3") <> "" THEN
  851.     r% = -1
  852.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave4") <> "" THEN
  853.     r% = -1
  854.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave5") <> "" THEN
  855.     r% = -1
  856.     END IF
  857.     HasSoundDriver = r%
  858. END FUNCTION
  859.  
  860. '' Include product-specific function definitions
  861. '$INCLUDE 'specific.inc'
  862.